﻿using System;
using System.Collections.Generic;
using System.Text;
using Coordenadas;
using System.Xml;
using System.Windows.Forms;
namespace MapaMovil
{
    public class Carro
    {
        private string nombre, especialidad,acargo,estado;
        private LatLong posicion;
        private List<Herramienta> herramientas;
        public Carro(XmlTextReader xml)
        {
            if (xml == null)
                return;
            XmlDocument xdoc = new XmlDocument();
            xdoc.Load(xml);
            this.nombre=xdoc.SelectNodes("//carro/nombre")[0].InnerText;
            this.acargo= xdoc.SelectNodes("//carro/acargo")[0].InnerText;
            this.estado= xdoc.SelectNodes("//carro/estado")[0].InnerText;
            try
            {
                this.posicion = new LatLong(double.Parse(xdoc.SelectNodes("//carro/posicion/lat")[0].InnerText),
                                            double.Parse(xdoc.SelectNodes("//carro/posicion/lon")[0].InnerText));
            }
            catch(Exception){
                this.posicion = null;
            }

            this.especialidad = xdoc.SelectNodes("//carro/especialidad")[0].InnerText;
            XmlNodeList nodos = xdoc.SelectNodes("//carro/herramientas/herramienta");
            this.herramientas = new List<Herramienta>();
            for (int i = 0; i < nodos.Count; i++)
            {
                XmlNodeList nodosCat = nodos[i].SelectNodes("categorias/categoria");
                List<string> cat = new List<string>();
                for (int j = 0; j < nodosCat.Count; j++)
                    cat.Add(nodosCat[j].InnerText);
                Herramienta tmp = new Herramienta(nodos[i].SelectNodes("nombre")[0].InnerText,cat,this);
                this.herramientas.Add(tmp);

            }
            //doc.Load(xml);
            /* El XML tiene un tag llamado emergencia que viene con los 
             * atributos de esta Ej:
             * 	<carro>
             * 	    <nombre></nombre>
             * 	    <acargo></acargo>
             * 	    <posicion>
             * 	        <lat></lat>
             * 	        <lon></lon>
             *      </posicion>
             *      <especialidad></especialidad>
             *      <herramientas>
             *          <herramienta>
             *              <nombre></nombre>
             *              <ubicacion></ubicacion>
             *              <categorias>
             *                  <categoria></categoria>
             *              </categorias>
             *              <enuso></enuso>
             *          </herramienta>
             *      </herramientas>
             *  </carro>
             */
            //XmlNodeList XMLHerramientas = doc.GetElementsByTagName("herramienta");
            //this.nombre = doc.GetElementsByTagName("nombre")[0].InnerText;
            //this.acargo = doc.GetElementsByTagName("acargo")[0].InnerText;
            //this.posicion = new LatLong(double.Parse(doc.GetElementsByTagName("lat")[0].InnerText),double.Parse(doc.GetElementsByTagName("lon")[0].InnerText));
            //this.especialidad = doc.GetElementsByTagName("especialidad")[0].InnerText;
            //this.herramientas = new List<Herramienta>();
        }
        public Carro(string nombre, string especialidad)
        {
            this.nombre = nombre;
            this.acargo = "";
            this.estado = "";
            this.especialidad = especialidad;
            this.herramientas = new List<Herramienta>();
        }
        public Carro(string nombre, string especialidad, LatLong posicion)
        {
            this.nombre = nombre;
            this.acargo = "";
            this.estado = "";
            this.especialidad = especialidad;
            this.posicion = posicion;
            this.herramientas = new List<Herramienta>();
        }
        public void agregarHerramienta(Herramienta x)
        {
            this.herramientas.Add(x);
        }
        public List<Herramienta> tieneHerramienta(string nombre)
        {
            List<Herramienta> retorna = new List<Herramienta>();
            for (int i = 0; i < this.herramientas.Count; i++)
                if (this.herramientas[i].Nombre.ToLower().Contains(nombre.ToLower()) ||
                    this.herramientas[i].perteneceCategoria(nombre.ToLower())
                    )
                    retorna.Add(this.herramientas[i]);
            return retorna;
        }
        public LatLong Posicion
        {
            get
            {
                return this.posicion;
            }
            set
            {
                this.posicion = value;
            }
        }
        public string Nombre
        {
            get
            {
                return this.nombre;
            }
            set
            {
                this.nombre = value;
            }
        }
        public string Especialidad
        {
            get
            {
                return this.especialidad;
            }
            set
            {
                this.especialidad = value;
            }
        }
        public string Acargo
        {
            get
            {
                return this.acargo;
            }
            set
            {
                this.acargo = value;
            }
        }
        public string Estado
        {
            get
            {
                return this.estado;
            }
            set
            {
                this.estado= value;
            }
        }
        public List<Herramienta> Herramientas
        {
            get
            {
                return this.herramientas;
            }
            set
            {
                this.herramientas = value;
            }
        }
    }
}
